"""
使用示例 - Agent自动发布

展示各种使用场景和最佳实践
"""

import os
import sys
import json
from pathlib import Path
from dotenv import load_dotenv

# Windows编码修复
if sys.platform == 'win32':
    os.environ['PYTHONIOENCODING'] = 'utf-8'

# 添加项目根目录到路径
project_root = Path(__file__).parent.parent
sys.path.insert(0, str(project_root))

# 加载环境变量
load_dotenv(project_root / '.env')

from scripts.auto_publish_agent import AgentAutoPublisher


def example_1_basic():
    """示例1: 基础用法"""
    print("\n" + "=" * 80)
    print("示例1: 基础用法 - 创建并发布一个简单的Agent")
    print("=" * 80)

    publisher = AgentAutoPublisher()

    agent_config = {
        "name": "基础示例Agent",
        "model_id": "ep-20241231203825-nwz4f",
        "prompt": "你是一个友好的AI助手",
        "description": "基础示例Agent"
    }

    result = publisher.auto_publish(
        agent_config=agent_config,
        version="1.0.0",
        wait_approval=False  # 不等待审核
    )

    print(f"\n✅ AppID: {result['app_id']}")
    print(f"✅ API Key: {result['api_key']}")


def example_2_advanced():
    """示例2: 高级配置"""
    print("\n" + "=" * 80)
    print("示例2: 高级配置 - 使用完整配置选项")
    print("=" * 80)

    publisher = AgentAutoPublisher()

    agent_config = {
        # 基础配置
        "name": "企业知识库助手",
        "description": "帮助员工查询和管理企业知识库",
        "model_id": "ep-20241231203825-nwz4f",

        # 提示词配置
        "prompt": """你是企业内部的AI知识库助手。

你的职责：
1. 帮助员工快速查找企业知识库中的信息
2. 解答关于公司政策、流程的问题
3. 提供准确、专业的回答

注意事项：
- 保持专业、友好的态度
- 确保信息准确性
- 保护企业信息安全
- 如不确定答案，建议员工咨询相关部门""",

        "welcome_message": "你好！我是企业知识库AI助手，我可以帮你查询公司的各类信息和流程。有什么我可以帮助你的吗？",

        # 发布配置
        "version_desc": "v1.0.0 - 初始版本，支持基础知识查询",
        "category_codes": ["Business", "Technology"],
        "auth_type": "Private",  # 私有，仅企业内部使用
        "auth_range_type": "All"
    }

    result = publisher.auto_publish(
        agent_config=agent_config,
        version="1.0.0",
        wait_approval=True,
        approval_timeout=600  # 10分钟超时
    )

    print(f"\n✅ 发布成功: {result['success']}")
    print(f"✅ AppID: {result['app_id']}")


def example_3_step_by_step():
    """示例3: 分步执行"""
    print("\n" + "=" * 80)
    print("示例3: 分步执行 - 逐步控制发布流程")
    print("=" * 80)

    publisher = AgentAutoPublisher()

    # 步骤1: 创建Agent
    print("\n步骤1: 创建Agent...")
    agent_config = {
        "name": "分步示例Agent",
        "model_id": "ep-20241231203825-nwz4f",
        "prompt": "你是一个测试AI助手",
    }
    publisher.create_agent(agent_config)
    print(f"✅ AppID: {publisher.app_id}")

    # 步骤2: 创建多个API密钥
    print("\n步骤2: 创建多个API密钥...")
    publisher.create_api_key("开发环境密钥")
    dev_key = publisher.api_key

    publisher.create_api_key("生产环境密钥")
    prod_key = publisher.api_key

    print(f"✅ 开发密钥: {dev_key[:20]}...")
    print(f"✅ 生产密钥: {prod_key[:20]}...")

    # 步骤3: 发布
    print("\n步骤3: 发布到智能体中心...")
    publisher.publish_to_center(
        version="1.0.0",
        version_desc="分步发布示例",
        category_codes=["Other"]
    )
    print(f"✅ PublishID: {publisher.publish_id}")

    # 步骤4: 检查状态
    print("\n步骤4: 检查发布状态...")
    publisher.check_publish_status()

    print("\n✅ 分步执行完成!")


def example_4_from_json():
    """示例4: 从JSON配置文件加载"""
    print("\n" + "=" * 80)
    print("示例4: 从JSON配置文件加载配置")
    print("=" * 80)

    config_file = project_root / "scripts" / "agent_config_template.json"

    if not config_file.exists():
        print(f"⚠️  配置文件不存在: {config_file}")
        return

    # 加载配置
    with open(config_file, 'r', encoding='utf-8') as f:
        agent_config = json.load(f)

    # 移除注释字段
    agent_config.pop('_comments', None)

    # 修改必要的字段
    agent_config['name'] = "JSON配置示例Agent"
    agent_config['description'] = "从JSON配置文件创建的Agent"

    print(f"✅ 已加载配置: {config_file}")
    print(f"   Agent名称: {agent_config['name']}")

    # 执行发布
    publisher = AgentAutoPublisher()
    result = publisher.auto_publish(
        agent_config=agent_config,
        version="1.0.0",
        wait_approval=False
    )

    # 保存结果
    output_file = project_root / "scripts" / "example_result.json"
    with open(output_file, 'w', encoding='utf-8') as f:
        json.dump(result, f, ensure_ascii=False, indent=2)

    print(f"✅ 结果已保存: {output_file}")


def example_5_error_handling():
    """示例5: 错误处理"""
    print("\n" + "=" * 80)
    print("示例5: 错误处理 - 如何处理发布过程中的错误")
    print("=" * 80)

    publisher = AgentAutoPublisher()

    # 故意使用错误的配置来演示错误处理
    agent_config = {
        "name": "错误处理示例",
        "model_id": "invalid_model_id",  # 无效的模型ID
        "prompt": "测试提示词"
    }

    try:
        result = publisher.auto_publish(
            agent_config=agent_config,
            version="1.0.0",
            wait_approval=False
        )

    except Exception as e:
        print(f"\n✅ 成功捕获错误:")
        print(f"   错误类型: {type(e).__name__}")
        print(f"   错误信息: {str(e)}")
        print("\n💡 错误处理建议:")
        print("   1. 检查模型ID是否正确")
        print("   2. 确认所有必填参数已提供")
        print("   3. 查看详细错误信息")
        print("   4. 修改配置后重试")


def example_6_batch_publish():
    """示例6: 批量发布"""
    print("\n" + "=" * 80)
    print("示例6: 批量发布 - 一次性发布多个Agent")
    print("=" * 80)

    # 定义多个Agent配置
    agents = [
        {
            "name": "客服助手",
            "model_id": "ep-20241231203825-nwz4f",
            "prompt": "你是一个专业的客服AI助手",
            "description": "处理客户咨询",
            "category_codes": ["Business"]
        },
        {
            "name": "技术支持助手",
            "model_id": "ep-20241231203825-nwz4f",
            "prompt": "你是一个技术支持AI助手",
            "description": "提供技术支持",
            "category_codes": ["Technology"]
        },
        {
            "name": "内容创作助手",
            "model_id": "ep-20241231203825-nwz4f",
            "prompt": "你是一个内容创作AI助手",
            "description": "辅助内容创作",
            "category_codes": ["Entertainment"]
        }
    ]

    results = []

    for i, agent_config in enumerate(agents, 1):
        print(f"\n处理第 {i}/{len(agents)} 个Agent: {agent_config['name']}")

        try:
            publisher = AgentAutoPublisher()
            result = publisher.auto_publish(
                agent_config=agent_config,
                version="1.0.0",
                wait_approval=False  # 批量发布时不等待审核
            )
            results.append({
                "name": agent_config['name'],
                "success": True,
                "app_id": result['app_id'],
                "api_key": result['api_key']
            })
            print(f"✅ {agent_config['name']} 发布成功")

        except Exception as e:
            results.append({
                "name": agent_config['name'],
                "success": False,
                "error": str(e)
            })
            print(f"❌ {agent_config['name']} 发布失败: {str(e)}")

    # 汇总结果
    print("\n" + "=" * 80)
    print("批量发布结果汇总:")
    print("=" * 80)

    success_count = sum(1 for r in results if r['success'])
    print(f"成功: {success_count}/{len(results)}")

    for result in results:
        status = "✅" if result['success'] else "❌"
        print(f"{status} {result['name']}")
        if result['success']:
            print(f"   AppID: {result['app_id']}")
        else:
            print(f"   错误: {result['error']}")


def main():
    """主函数 - 选择运行示例"""
    print("=" * 80)
    print("🎯 Agent自动发布 - 使用示例集合")
    print("=" * 80)

    print("\n可用示例:")
    print("1. 基础用法 - 最简单的发布方式")
    print("2. 高级配置 - 使用完整配置选项")
    print("3. 分步执行 - 逐步控制发布流程")
    print("4. JSON配置 - 从配置文件加载")
    print("5. 错误处理 - 如何处理错误")
    print("6. 批量发布 - 一次性发布多个Agent")
    print("0. 运行所有示例")

    choice = input("\n请选择要运行的示例 (0-6, 默认1): ").strip() or "1"

    try:
        if choice == "0":
            # 运行所有示例（跳过实际执行，只显示代码）
            print("\n注意: 批量运行将只显示示例代码，不会实际执行")
            print("\n运行示例1...")
            print("(跳过实际执行)")

        elif choice == "1":
            example_1_basic()

        elif choice == "2":
            example_2_advanced()

        elif choice == "3":
            example_3_step_by_step()

        elif choice == "4":
            example_4_from_json()

        elif choice == "5":
            example_5_error_handling()

        elif choice == "6":
            example_6_batch_publish()

        else:
            print("无效的选项")
            return

        print("\n" + "=" * 80)
        print("示例运行完成!")
        print("=" * 80)

    except KeyboardInterrupt:
        print("\n\n⚠️  示例被用户中断")
        sys.exit(1)

    except Exception as e:
        print(f"\n❌ 示例运行失败: {str(e)}")
        import traceback
        traceback.print_exc()


if __name__ == "__main__":
    main()
